-- 首先尝试加载 'nvim-treesitter.configs' 模块
local treesitter = pRequire("nvim-treesitter.configs")
-- 加载 'guru' 模块的配置
local cfg = require("guru").config
-- 尝试加载 'nvim-treesitter.query' 模块
local treesitterQuery = pRequire("nvim-treesitter.query")
-- 如果没有安装 'nvim-treesitter.query' 则直接返回
if not treesitterQuery then
  return
end

-- 如果成功加载了 Treesitter 相关配置
if treesitter then
  -- 设置 Treesitter 优先使用 Git 进行安装
  pRequire("nvim-treesitter.install").prefer_git = true
  treesitter.setup({
    -- 不同步安装（可手动安装）
    sync_install = false,
    -- 确保安装用户配置中列出的语言列表
    ensure_installed = require("guru.env").getTSEnsureList(),
    -- 高亮配置
    highlight = {
      enable = true, -- 开启高亮
      additional_vim_regex_highlighting = false, -- 不使用额外的 Vim 正则高亮
      -- 大文件禁用高亮的条件
      disable = function(_, bufnr)
        return vim.api.nvim_buf_line_count(bufnr) > cfg.max_highlight_line_count
      end,
    },
    incremental_selection = {
      enable = false, -- 增量选择功能，默认关闭
      keymaps = {
        init_selection = "<CR>",
        node_incremental = "<CR>",
        node_decremental = "<BS>",
        scope_incremental = "<TAB>",
      },
    },
    -- 缩进配置
    indent = {
      enable = true, -- 开启自动缩进
    },
    -- 自动闭合标签（HTML/XML等）
    autotag = {
      enable = true,
    },
    -- Ruby 等语言的代码块自动结束
    endwise = {
      enable = true,
    },
    -- 重构相关功能
    refactor = {
      -- 高亮定义
      highlight_definitions = {
        enable = true,
        -- 如果 `updatetime` 设置为 ~100，可以关闭此功能
        clear_on_cursor_move = true,
      },
      -- 高亮当前作用域，默认关闭
      highlight_current_scope = { enable = false },
    },
    -- 文本对象操作
    textobjects = {
      -- 选择文本对象
      select = {
        enable = true,
        lookahead = true, -- 自动向前查找文本对象，类似 targets.vim 插件
        keymaps = {
          -- 可以使用在 textobjects.scm 中定义的捕获组
          ["af"] = "@function.outer",
          ["if"] = "@function.inner",
          ["ac"] = "@class.outer",
          ["ic"] = "@class.inner",
          ["ai"] = "@conditional.outer",
          ["ii"] = "@conditional.inner",
          ["al"] = "@loop.outer",
          ["il"] = "@loop.inner",
          ["ab"] = "@block.outer",
          ["ib"] = "@block.inner",
        },
      },
      -- 交换文本对象功能，默认关闭
      swap = {
        enable = false,
        swap_next = {
          ["<leader>a"] = "@parameter.inner",
        },
        swap_previous = {
          ["<leader>A"] = "@parameter.inner",
        },
      },
      -- 移动到相邻文本对象
      move = {
        enable = true, -- 开启移动功能
        set_jumps = true, -- 设置跳转列表
        -- 跳转到下一个起点
        goto_next_start = {
          ["]m"] = "@function.outer",
          ["]]"] = "@class.outer",
        },
        -- 跳转到下一个终点
        goto_next_end = {
          ["]M"] = "@function.outer",
          ["]["] = "@class.outer",
        },
        -- 跳转到上一个起点
        goto_previous_start = {
          ["[m"] = "@function.outer",
          ["[["] = "@class.outer",
        },
        -- 跳转到上一个终点
        goto_previous_end = {
          ["[M"] = "@function.outer",
          ["[]"] = "@class.outer",
        },
      },
    },
  })
  -- 镜像设置（如果有的话）略过，可根据需要取消注释
  -- 代码折叠设置
  vim.opt.foldmethod = "expr" -- 使用表达式进行代码折叠
  vim.opt.foldexpr = "nvim_treesitter#foldexpr()" -- 使用 Treesitter 的折叠表达式
  vim.opt.foldenable = false -- 默认不启用折叠
  vim.opt.foldtext = "v:lua.require('guru.utils.simple-fold').simple_fold()" -- 设置折叠文本
  -- 设置默认展开折叠的级别
  vim.opt.foldlevel = 99
end
